#!/usr/bin/python
import re
import subprocess
import json
uplinkmatch = re.compile('^\s*Uplinks:\s*(.*)')
nodename = None
for inf in open('/etc/confluent/confluent.info', 'r').read().split('\n'):
    if inf.startswith('NODENAME: '):
        nodename = inf.replace('NODENAME: ', '')
        break

deploycfg = open('/etc/confluent/confluent.deploycfg', 'r').read().split('\n')
cfg = {}
nslist = False
nameservers = []
for line in deploycfg:
    kv = line.split(': ')
    if not kv[0]:
        continue
    if len(kv) == 2:
        cfg[kv[0]] = kv[1]
    if kv[0] == 'nameservers:':
        nslist = True
        continue
    if nslist and kv[0].startswith('- '):
        nameservers.append(kv[0].split(' ', 1)[1])
    else:
        nslist=False
cfg['nameservers'] = ','.join(nameservers)
vswinfo = subprocess.check_output(['localcli', 'network', 'vswitch', 'standard', 'list']).decode('utf8')
vmnic = None
for info in vswinfo.split('\n'):
    upinfo = uplinkmatch.match(info)
    if upinfo:
        vmnic = upinfo.group(1)
        if vmnic and 'vusb0' not in vmnic:
            break
try:
    with open('/tmp/confluentident/cnflnt.jsn') as identin:
        identcfg = json.load(identin)
        ncfg = identcfg['net_cfgs'][0]
        cfg['ipv4_method'] = ncfg['ipv4_method']
        cfg['ipv4_address'] = ncfg['ipv4_address'].split('/')[0]
        cfg['ipv4_netmask'] = ncfg['ipv4_netmask']
        cfg['ipv4_gateway'] = ncfg['ipv4_gateway']
except Exception:
    pass
netline = 'network --hostname={0} --bootproto={1}'.format(nodename, cfg['ipv4_method'])
if vmnic:
    netline += ' --device={0}'.format(vmnic)
if cfg['ipv4_method'] == 'static':
    netline += ' --ip={0} --netmask={1}'.format(cfg['ipv4_address'], cfg['ipv4_netmask'])
    if cfg.get('ipv4_gateway', 'null') not in (None, '', 'null'):
        netline += ' --gateway={0}'.format(cfg['ipv4_gateway'])
    if cfg['nameservers']:
        netline += ' --nameserver={0}'.format(cfg['nameservers'])
vlanid = None
try:
    with open('/tmp/confluent.vlanid', 'r') as vlanin:
        vlanid = vlanin.read()
except Exception:
    pass
if vlanid:
    netline += ' --vlanid={0}'.format(vlanid)
print(netline)
